home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d8
/
pautolog.arc
/
PAUTOLOG.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-03-17
|
8KB
|
266 lines
/*
** PRODIGY AutoLogon File Generator
**
** Rich Taylor, 3/17/90
*/
/* includes */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
/* defines */
#define TRUE 1
#define FALSE 0
/* prototypes */
static void near pascal write_keytrace_string( FILE *fp, char *str );
static void near pascal write_keytrace_char( FILE *fp, char byCh );
static unsigned char near pascal check_prodigy_id( char * );
static void near pascal get_string( char *, int );
int main (int argc, char *argv[]);
/* -------------------------------------------------------------------------- */
int main (int argc, char *argv[])
{
FILE *fp;
int i;
char szFileName[_MAX_PATH];
char szId[100];
char szPass[100];
unsigned char bIdFound, bPassFound;
/* print banner */
printf( "PRODIGY AutoLogon Generator, v1.00.00, 3/17/90\n" );
printf( "Copyright (C) 1990, Rich Taylor (ID = PFTM42A)\n" );
printf( "PRODIGY is a registered service mark and trademark of Prodigy Services Co.\n\n" );
printf( "Use /? command line option for HELP.\n\n" );
/* check for command line data */
/* /? - display help */
/* /o - alternate output filename */
/* /i - ID string */
/* /p - Password string */
/* search for /? : print help */
for( i=1; i<=argc; i++ )
if( 0 == strcmp( "/?", argv[i]) )
{
printf( "This program will create a keystroke input file that performs an automatic\n" );
printf( "logon to the PRODIGY service. The data is written to a file named\n" );
printf( "KEYTRACE.AUT (unless you override the filename). If you do not specify\n" );
printf( "your ID and password on the command line, the program will prompt you.\n\n" );
printf( "KEYTRACE.AUT must be in your PRODIGY directory to work.\n\n" );
printf( "Note - PRODIGY ID's are checked for valid form: AAAADDM, where\n" );
printf( " A = letter (A-Z), D = digit (0-9), and M = member letter (A-F)\n\n" );
printf( "Command Line Arguments:\n" );
printf( " /o <filename> to change output filename\n" );
printf( " /i <ID> to indicate ID\n" );
printf( " /p <Password chars> to indicate password\n\n" );
exit( 0 );
}
printf( "<CR> terminates program from input prompt.\n" );
/* search for /o : new output filename */
strcpy( szFileName, "KEYTRACE.AUT" );
for( i=1; i<=argc; i++ )
if( 0 == strcmp( "/o", argv[i]) || 0 == strcmp( "/O", argv[i]) )
{
if( i+1 > argc )
{
printf( "Missing output filename\n" );
exit( 10 );
}
else
strcpy( szFileName, argv[i+1] );
}
/* search for /i : ID string */
bIdFound = FALSE;
for( i=1; i<=argc; i++ )
if( 0 == strcmp( "/i", argv[i]) || 0 == strcmp( "/I", argv[i]) )
{
if( i+1 > argc )
{
printf( "Missing ID.\n" );
exit( 10 );
}
else
{
bIdFound = TRUE;
strcpy( szId, argv[i+1] );
}
}
/* search for /p : password string */
bPassFound = FALSE;
for( i=1; i<=argc; i++ )
if( 0 == strcmp( "/p", argv[i]) || 0 == strcmp( "/P", argv[i]) )
{
if( i+1 > argc )
{
printf( "Missing Password.\n" );
exit( 10 );
}
else
{
bPassFound = TRUE;
strcpy( szPass, argv[i+1] );
}
}
printf( "\n" ); /* insert space */
/* Handle ID */
if( !bIdFound )
{ /* prompt for ID */
while( !bIdFound )
{
printf( "Enter Prodigy ID: " );
get_string( szId, 100 );
if( 0 == strlen( szId ) ) /* No entry -> exit */
return( 0 );
bIdFound = check_prodigy_id( szId );
if( !bIdFound )
printf( " <- Not valid PRODIGY ID\n" );
else
printf( "\n" );
} /* ID entry loop */
}
else
/* check ID for correct PRODIGY format & change ID to uppercase */
if( !check_prodigy_id( szId ) )
{
printf( "\"%s\" is an invalid PRODIGY ID - must follow AAAADDM format,\n", szId );
printf( " where A = letter (A-Z), D = digit (0-9), and M = member letter (A-F).\n" );
exit( 10 );
}
/* prompt for Password */
if( !bPassFound )
{
printf( "Enter password: " );
get_string( szPass, 100 );
printf( "\n" );
if( 0 == strlen( szPass ) ) /* No entry -> exit */
return( 0 );
}
/* Open output file */
if( NULL == (fp = fopen( szFileName, "wb" )) )
{
printf( "Error opening file: [%s]\n", szFileName );
exit( 10 );
}
/* write file */
write_keytrace_string( fp, szId );
write_keytrace_char( fp, '\x0D' );
write_keytrace_string( fp, szPass );
write_keytrace_char( fp, '\x0D' );
fclose( fp );
printf( "\nID = \"%s\", Password = \"%s\" written to %s\n", szId, szPass, szFileName );
return( 0 );
} /* main() */
/* -------------------------------------------------------------------------- */
static void near pascal write_keytrace_string( FILE *fp, char *str )
{
while( *str )
write_keytrace_char( fp, *str++ );
} /* write_keytrace_string() */
/* -------------------------------------------------------------------------- */
static void near pascal write_keytrace_char( FILE *fp, char byCh )
{
fprintf( fp, "%c", byCh ); /* write char */
fprintf( fp, "%c", '\0' ); /* write zero/null */
} /* write_keytrace_char() */
/* -------------------------------------------------------------------------- */
static void near pascal get_string( str, maxlen )
char *str;
int maxlen;
{
int pos = 0;
unsigned char crh = FALSE;
#define CR 0x0D
#define BS 0x08
while( !crh && pos < maxlen-1 )
{
str[pos] = (char)getch();
if( CR == str[pos] )
{
crh = TRUE;
continue;
}
else if( BS == str[pos] )
{
if( 0 == pos )
continue;
putch( 0x08 ); /* Backup over existing char */
putch( ' ' ); /* Erase char */
putch( 0x08 ); /* Backup of space */
pos --;
continue;
}
putch( str[pos] ); /* echo */
pos++;
} /* character input loop */
str[pos] = '\0';
} /* get_string() */
/* -------------------------------------------------------------------------- */
static unsigned char near pascal check_prodigy_id( szId )
char *szId;
{
int i, nlen;
/* check for correct length */
if( 7 != (nlen = strlen( szId )) )
return( FALSE );
/* first, convert string to uppercase */
for( i=0; i<nlen; i++ )
szId[i] = toupper( szId[i] );
/* check that first 4 chars are alpha */
for( i=0; i<4; i++ )
if( !isalpha( szId[i] ) )
return( FALSE );
/* check that next 2 chars are alpha */
for( i=4; i<6; i++ )
if( !isdigit( szId[i] ) )
return( FALSE );
/* check that last character is in 'A' - 'F' */
if( NULL == strpbrk( &(szId[6]), "ABCDEF" ) )
return( FALSE );
return( TRUE );
} /* check_prodigy_id() */